package com.cxy.controller;

import cn.dev33.satoken.exception.NotPermissionException;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import com.cxy.model.SysUser;
import com.cxy.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user/")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("doLogin")
    public String doLogin(String username, String password) {
        if ("zhang".equals(username) && "123456".equals(password)) {
            StpUtil.login(10001);
            return "登录成功";
        }
        return "登录失败";
    }

    @RequestMapping("isLogin")
    public String isLogin() {
        return "当前会话是否登录：" + StpUtil.isLogin();
    }

    @RequestMapping("user_info")
    public String userInfo() {
        StpUtil.checkLogin();
        return "";
    }

    /**
     * 当前会话注销登录
     *
     * @return
     */
    @RequestMapping("logout")
    public String logout() {
        StpUtil.logout();
        return "";
    }


    /**
     * 踢人下线
     *
     * @return
     */
    @RequestMapping("kicking_off")
    public String kickingOff() {
        // 将账号id为 10077 的会话踢下线
        StpUtil.kickout(10001);
        return "";
    }

    /**
     * 权限认证
     */
    @RequestMapping("authority_certification")
    public String insert(SysUser user) {

        SysUser save = userService.save(user);
        // ...
        return "用户增加";
    }

    /**
     * 权限认证
     * 会话查询
     */
    @RequestMapping("session_info")
    public String sessionInfo() {
        // 获取当前会话账号id, 如果未登录，则抛出异常：`NotLoginException`
        StpUtil.getLoginId();

        // 类似查询API还有：
        StpUtil.getLoginIdAsString();    // 获取当前会话账号id, 并转化为`String`类型
        StpUtil.getLoginIdAsInt();       // 获取当前会话账号id, 并转化为`int`类型
        StpUtil.getLoginIdAsLong();      // 获取当前会话账号id, 并转化为`long`类型

        // ---------- 指定未登录情形下返回的默认值 ----------

        // 获取当前会话账号id, 如果未登录，则返回null
        StpUtil.getLoginIdDefaultNull();

        // 获取当前会话账号id, 如果未登录，则返回默认值 （`defaultValue`可以为任意类型）
        //        StpUtil.getLoginId(T defaultValue);


        //Token 查询
        // 获取当前会话的token值
        StpUtil.getTokenValue();

        // 获取当前`StpLogic`的token名称
        StpUtil.getTokenName();

        // 获取指定token对应的账号id，如果未登录，则返回 null
        //        StpUtil.getLoginIdByToken(String tokenValue);

        // 获取当前会话剩余有效期（单位：s，返回-1代表永久有效）
        StpUtil.getTokenTimeout();

        // 获取当前会话的token信息参数
        StpUtil.getTokenInfo();

        return "用户增加";
    }




}